
#include "Camara2.h"
#include <iostream>

using namespace std;

Camara::Camara(Pantalla* pant, SDL_Rect* rectPersonaje) {
	this->pantalla = pant;
	this->camara = new SDL_Rect();
	iniciarCam(pantalla, rectPersonaje);
}

Camara::~Camara() {
	delete camara;
}

void Camara::iniciarCam(Pantalla* pantalla, SDL_Rect* rectPersonaje) {
	camara->x = rectPersonaje->x - pantalla->getAncho()/2;
	camara->y = rectPersonaje->y - pantalla->getAlto()/2;
	camara->w = pantalla->getAncho();
	camara->h = pantalla->getAlto();
}

void Camara::setCamara(SDL_Rect* rectPersonaje, int anchoNivel, int altoNivel) {


	if (rectPersonaje->x - rectPersonaje->w/2 < camara->x + pantalla->getMargenScrollX()) {
		camara->x = rectPersonaje->x - rectPersonaje->w/2 - pantalla->getMargenScrollX();
	}

	if (rectPersonaje->x + rectPersonaje->w/2 > camara->x + pantalla->getAncho() - pantalla->getMargenScrollX()) {
	    camara->x = rectPersonaje->x + rectPersonaje->w/2 + pantalla->getMargenScrollX() - pantalla->getAncho();
	}

	if (rectPersonaje->y - rectPersonaje->h < camara->y + pantalla->getMargenScrollY()) {
		camara->y = rectPersonaje->y - rectPersonaje->h - pantalla->getMargenScrollY();
	}

	if (rectPersonaje->y + rectPersonaje->h > camara->y + pantalla->getAlto() - pantalla->getMargenScrollY()) {
	    camara->y = rectPersonaje->y + rectPersonaje->h + pantalla->getMargenScrollY() - pantalla->getAlto();
	}

    //mantenemos la camara dentro del nivel
    if( camara->x < 0 ) camara->x = 0;
    
    if (pantalla->getAncho() < anchoNivel && camara->x > anchoNivel - camara->w ) {
		camara->x = anchoNivel - camara->w;
	} else if( camara->x > anchoNivel - camara->w ) {
		camara->x = pantalla->getAncho() - camara->w;
    }

    if( camara->y < 0 ) camara->y = 0;

    if (pantalla->getAlto() < altoNivel && camara->y > altoNivel - camara->h ) {
		camara->y = altoNivel - camara->h;
    } else if( camara->y > altoNivel - camara->h ) {
		camara->y = pantalla->getAlto() - camara->h;
	}
}

int Camara::getX(){
	return camara->x;
}

int Camara::getY(){
	return camara->y;
}

int Camara::getAncho() {
	return camara->w;
}

int Camara::getAlto() {
	return camara->h;
}

SDL_Rect* Camara::getCamara() {
	return camara;
}
